package com.tedu.api.thread;

/**
 * 线程--创建3种
 * 第一种：子类 继承Thread 方案--【使用率不多】
 *   ①编写子类 MyThread 继承 Thread
 *   ②子类，重写run方法【】
 *   ③实例化 MyThread1 对象 调用start方法【启动线程】
 * 第二种：子类 实现Runnable接口 方案--【推荐用法】
 *   ①编写子类MyRunnable1 实现 Runnable 接口
 *   ②子类，强制重写run方法【线程运行】
 *   ③实例化MyRunnable1对象【没有start方法】
 *   ④创建Thread对象，把实例化MyRunnable1 对象通过构造器
 *   ⑤调用Thread对象 start方法
 * 线程 继承Thread 内嵌入Runnable接口 重写run方法
 *    JavaOOP--缺点Java支持单继承Thread
 *    无法拓展：不仅线程、其他集合、继承其他类、只具备线程功能
 *    启动线程方法 start()--线程生命周期
 *    缺点：线程创建不明确
 *    实现Runnable真正线程运行---定义run方法，线程运行状态
 *    优点：继承还可以实现--拓展型高
 *    缺点：线程创建不方便--项目：步骤逻辑清晰
 * 第三种：匿名内部类实现线程---Lambda表达式
 *
 * JavaOOP：封装--内部类：成员内部类、方法内部类、静态内部类、匿名内部类
 * 匿名内部类创建方式
 * 对象 引用=new 对象(){};
 * 匿名内部类--创建一次==子实现类实例化一次Thread/Runnable
 *            优点：省去创建子类对象名称--创建接口，抽象类创建
 */
public class TR {
    public static void main(String[] args) {
    //1.类只需要实例化一次：匿名内部类--Thread
    Thread t1=new Thread(){
        public void run(){
            for (int i=0;i<1000;i++){
                System.out.println("给我学的，一愣一愣");
            }
        }
    };
    t1.start();
    //2.类只需要实例化一次，匿名内部类--Runnable
        Thread t2=new Thread(new Runnable(){
            public void run() {
                for (int i=0;i<1000;i++){
                    System.out.println("时间不等人，但我等你");
                }
            }
        });
        t2.start();
 }
}
